//匿名函数返回一个对象(这种封装方法不会暴露未实例化的function)
var G_Popup = (function () {
    var yingSoftPopup=function() {
        /********************************************************************************
         函数名：alert
         功能：alert弹窗
         输入参数: title 弹窗标题,msg 弹窗消息,yesMsg 按钮要显示的内容,yesCb 按钮点击执行的回调事件
         返回值：无
         创建信息：韦友爱(2015-07-10)
         修改记录：无
         审查人：无
         *******************************************************************************/
        this.alert=function(title,msg,yesMsg,yesCb){
            if(!title){
                title='温馨提示';
            }
            if(!yesMsg){
                yesMsg='确认';
            }
            show({ buttons: { yes: yesMsg }, msg: msg, title: title,width:'300px',fn:{yesCallBack:yesCb}},'alert');
        }
        /********************************************************************************
         函数名：confirm
         功能：confirm弹窗
         输入参数: title 弹窗标题,msg 弹窗消息,yesMsg yes按钮要显示的内容,yesCb yes按钮点击执行的回调事件，
                    noMsg no按钮要显示的内容,noCb no按钮点击执行的回调事件
         返回值：无
         创建信息：韦友爱(2015-07-10)
         修改记录：无
         审查人：无
         *******************************************************************************/
        this.confirm=function(title,msg,yesMsg,noMsg,yesCb,noCb,width,height){
            if(!title){
                title='温馨提示';
            }
            if(!yesMsg){
                yesMsg='确认';
            }
            if(!noMsg){
                noMsg='取消';
            }
            show({ buttons: { yes: yesMsg,no:noMsg }, msg: msg, title: title,width:width,height:height,fn:{yesCallBack:yesCb,noCallBack:noCb} },'confirm');
        }
        /********************************************************************************
         函数名：htmlContent
         功能：htmlContent弹窗
         输入参数: title 弹窗标题,msg 弹窗消息
         返回值：无
         创建信息：韦友爱(2015-07-10)
         修改记录：无
         审查人：无
         *******************************************************************************/
        this.htmlContent=function(title,msg,width,height){
            if(!title){
                title='温馨提示';
            }
            show({msg: msg, title: title, width:width,height:height},'htmlContent');
        }
        /********************************************************************************
         函数名：createModal
         功能：生成模态框
         输入参数: cfg 配置信息
         返回值：模态框对象
         创建信息：韦友爱(2015-08-04)
         修改记录：无
         审查人：无
         *******************************************************************************/
        this.createModal=function(cfg){
            if(!cfg){
                alert('没有配置信息');
                return;
            }
            var modal=initModal(cfg);
            return modal;
        }
        /********************************************************************************
         函数名：show
         功能：弹窗显示
         输入参数: cfg 配置文件
                    type 弹窗类型
         返回值：无
         创建信息：韦友爱(2015-07-10)
         修改记录：无
         审查人：无
         *******************************************************************************/
        function show(cfg,type){
            if(!cfg){
                throw ('没有配置文件');
            }
            var title='温馨提示';
            if(!cfg.title){
                cfg.title=title;
            }
            var modalId = type + '_modal';
            if ($('#' + modalId).length) {
                var modal = $('#' + modalId);
                if($(modal).hasClass('in')){
                    $(modal).modal('hide');
                    $(modal).on('hidden.bs.modal',function(){
                        $(modal).remove();
                        var modalDiv=initPopup(cfg,type);
                        $(modalDiv).modal('show');
                    });
                }else{
                    $(modal).remove();
                    var modalDiv=initPopup(cfg,type);
                    $(modalDiv).modal('show');
                }
            }else{
                var modalDiv=initPopup(cfg,type);
                $(modalDiv).modal('show');
            }

        }
        /********************************************************************************
         函数名：initPopup
         功能：弹窗初始化
         输入参数: cfg 配置文件
                    type 弹窗类型
         返回值：弹窗对象
         创建信息：韦友爱(2015-07-10)
         修改记录：无
         审查人：无
         *******************************************************************************/
        function initPopup(cfg, type) {
            var modalId = type + '_modal';
            var modalDiv = document.createElement('div'); //模态框
            modalDiv.className = 'modal fade';
            modalDiv.tabindex = '-1';
            modalDiv.role = 'dialog';
            modalDiv.ariaLabelledby = 'myModalLabel';
            modalDiv.ariaHidden = 'true';
            modalDiv.id = modalId;
        	var dialogDiv = document.createElement('div'); //遮罩层
        	dialogDiv.className = 'modal-dialog';
        	var contentDiv = document.createElement('div'); //弹出框
        	contentDiv.className = 'modal-content';
        	if (cfg.width) {
        		contentDiv.style.width = cfg.width;
        	}
        	if (cfg.height) {
        		contentDiv.style.height = cfg.height;
        	}
        	var headerDiv = document.createElement('div'); //标题框
        	headerDiv.className = 'modal-header header';
        	var closeBtn = document.createElement('button'); //关闭按钮
        	closeBtn.type = 'button';
        	closeBtn.className = 'close';
        	closeBtn.dataDismiss = 'modal';
        	closeBtn.ariaHidden = 'true';
        	closeBtn.innerHTML = '&times;';
        	closeBtn.onclick = function () {
        		$(modalDiv).modal('hide');
        	}
        	headerDiv.appendChild(closeBtn);
        	var titleH = document.createElement('h4'); //标题栏
        	titleH.className = 'modal-title';
        	titleH.innerHTML = cfg.title;
        	headerDiv.appendChild(titleH);
        	var bodyDiv = document.createElement('div'); //内容框
        	bodyDiv.className = 'modal-body table-responsive';
            var msg = cfg.msg;
            if(msg&&msg.toString()==='[object Object]'){
                for(var i=0;i<msg.length;i++){
                    bodyDiv.appendChild(msg[i]);
                }
            }else{
                bodyDiv.innerHTML = cfg.msg;
            }
        	contentDiv.appendChild(headerDiv); //填充弹出框
        	contentDiv.appendChild(bodyDiv);
        	var footerDiv = document.createElement('div'); //按钮框
        	footerDiv.className = 'modal-footer';
        	var yesBtn = document.createElement('button'); //确认按钮
        	yesBtn.type = 'button';
        	yesBtn.className = 'btn btn-primary';
            if(cfg.buttons&&cfg.buttons.yes){
                yesBtn.innerHTML = cfg.buttons.yes;
            }
        	yesBtn.onclick = function () {
        		if (cfg.fn.yesCallBack) {
                    $(yesBtn).blur()
        			cfg.fn.yesCallBack();
        		} else {
        			$(modalDiv).modal('hide');
        		}
        	};
        	footerDiv.appendChild(yesBtn);
        	var noBtn = document.createElement('button'); //取消按钮
        	noBtn.type = 'button';
        	noBtn.className = 'btn btn-primary';
            if(cfg.buttons&&cfg.buttons.no){
                noBtn.innerHTML = cfg.buttons.no;
            }
        	noBtn.onclick = function () {
        		if (cfg.fn.noCallBack) {
                    $(noBtn).blur()
        			cfg.fn.noCallBack();
        		} else {
        			$(modalDiv).modal('hide');
        			//$(modalDiv).remove();
        		}
        	};
        	footerDiv.appendChild(noBtn);
        	contentDiv.appendChild(footerDiv);
        	dialogDiv.appendChild(contentDiv);
        	modalDiv.appendChild(dialogDiv);
        	switch (type) {
				case 'alert':
					noBtn.style.display = 'none';
					break;
				case 'htmlContent': //html嵌入
					footerDiv.style.display = 'none';
					break;
        	};
        	return modalDiv;
        }
    }
    /********************************************************************************
     函数名：initModal
     功能：模态框初始化
     输入参数: cfg 配置文件
     返回值：弹窗对象
     创建信息：韦友爱(2015-08-04)
     修改记录：无
     审查人：无
     *******************************************************************************/
    function initModal(cfg){
        var name=cfg.name;
        if(!name){
            name='html';
        }
        if($('#'+name+'Modal').length){
            $('#'+name+'ModalBody').html(cfg.msg);
            return $('#'+name+'Modal');
        }
        var modalDiv = document.createElement('div'); //模态框
        modalDiv.className = 'modal fade';
        modalDiv.tabindex = '-1';
        modalDiv.role = 'dialog';
        modalDiv.ariaLabelledby = 'myModalLabel';
        modalDiv.ariaHidden = 'true';
        modalDiv.id=name+'Modal';
        var dialogDiv = document.createElement('div'); //遮罩层
        dialogDiv.className = 'modal-dialog';
        var contentDiv = document.createElement('div'); //弹出框
        contentDiv.className = 'modal-content';
        if (cfg.width) {
            contentDiv.style.width = cfg.width;
        }
        if (cfg.height) {
            contentDiv.style.height = cfg.height;
        }
        var headerDiv = document.createElement('div'); //标题框
        headerDiv.className = 'modal-header header';
        var closeBtn = document.createElement('button'); //关闭按钮
        closeBtn.type = 'button';
        closeBtn.className = 'close';
        closeBtn.dataDismiss = 'modal';
        closeBtn.ariaHidden = 'true';
        closeBtn.innerHTML = '&times;';
        closeBtn.onclick = function () {
            $(modalDiv).modal('hide');
        }
        headerDiv.appendChild(closeBtn);
        var titleH = document.createElement('h4'); //标题栏
        titleH.className = 'modal-title';
        titleH.innerHTML = cfg.title;
        headerDiv.appendChild(titleH);
        var bodyDiv = document.createElement('div'); //内容框
        bodyDiv.className = 'modal-body table-responsive';
        bodyDiv.id=name+'ModalBody';
        bodyDiv.innerHTML = cfg.msg;
        contentDiv.appendChild(headerDiv); //填充弹出框
        contentDiv.appendChild(bodyDiv);
        dialogDiv.appendChild(contentDiv);
        modalDiv.appendChild(dialogDiv);
        return modalDiv;
    }

    return new yingSoftPopup();
})();

